import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import axios from "axios";

import {
  Search,
  Button,
  Swipe,
  SwipeItem,
  ActionSheet,
  Checkbox,
  CheckboxGroup,
} from "vant";

Vue.use(Search);
Vue.use(Button);
Vue.use(Swipe);
Vue.use(SwipeItem);
Vue.use(ActionSheet);
Vue.use(Checkbox);
Vue.use(CheckboxGroup);

const no_auth_lists = ["/product/hot", "/login"]; // 不需要携带token的接口
// 添加请求拦截器：全局生效，对所有的请求进行拦截，可以对请求做全局的处理。比如：请求头token。
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    const requestUrl = config.url; // 当前访问的接口地址
    const is_auth = no_auth_lists.findIndex(path => requestUrl.includes(path));
    if (is_auth !== -1) {
      // console.log(`${requestUrl} 不需要携带token`);
    } else {
      // console.log(`${requestUrl} 需要携带token`);
      config.headers["authori-zation"] = localStorage.getItem("token");
    }
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    if (
      response.data.code == "401" &&
      response.data.message == "未登录或token过期，请登录！"
    ) {
      // alert("登录失效，重新登录");
      // location.href = "http://localhost:8080/#/login";
      localStorage.removeItem("token");
      window.location.reload();
    }
    return response;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

Vue.config.productionTip = false;
Vue.prototype.$axios = axios;

new Vue({
  router,
  store,
  render: h => h(App),
}).$mount("#app");
